27.3.2 Servlet上下文初始化

内嵌servlet容器不会直接执行Servlet 3.0+的javax.servlet.ServletContainerInitializer接口,或Spring的org.springframework.web.WebApplicationInitializer接口,这样设计的目的是降低war包内运行的第三方库破坏Spring Boot应用的风险。

如果需要在Spring Boot应用中执行servlet上下文初始化,你需要注册一个实现org.springframework.boot.context.embedded.ServletContextInitializer接口的bean。onStartup方法可以获取ServletContext,如果需要的话可以轻松用来适配一个已存在的WebApplicationInitializer

扫描Servlets, Filters和listeners

当使用一个内嵌容器时,通过@ServletComponentScan可以启用对注解@WebServlet@WebFilter@WebListener类的自动注册。

在独立的容器(非内嵌)中@ServletComponentScan不起作用,取为代之的是容器内建的discovery机制。